
const http = require('http');
const fs = require('fs');
const path = require('path');

const ssqPredictor = require('./ssq_predictor.js');

const { spawn } = require('child_process');
const os = require('os');

const url = 'https://raw.gitcode.com/chxii/lottery_results/raw/master/lottery_results.json';
const lotteryFilePath = './lottery_results.json';

// 检查文件是否今天已更新的函数
function isFileUpdatedToday(filePath) {
    try {
        // 获取文件状态信息
        const stats = fs.statSync(filePath);
        const fileMtime = new Date(stats.mtime);
        const today = new Date();
        
        // 比较日期部分（忽略时间部分）
        return fileMtime.getDate() === today.getDate() &&
               fileMtime.getMonth() === today.getMonth() &&
               fileMtime.getFullYear() === today.getFullYear();
    } catch (error) {
        console.error('❌ 检查文件修改日期时出错:', error.message);
        // 如果文件不存在或有其他错误，返回false，表示需要更新
        return false;
    }
}

function openBrowser(url) {
  const platform = os.platform();
  let command;
  let args;

  switch (platform) {
    case 'win32':
      command = 'cmd';
      args = ['/c', 'start', '""', url];
      break;
    case 'darwin': // macOS
      command = 'open';
      args = [url];
      break;
    case 'linux':
      command = 'xdg-open';
      args = [url];
      break;
    default:
      throw new Error(`Unsupported platform: ${platform}`);
  }

  spawn(command, args, { stdio: 'ignore' });
}



// 获取当前脚本所在目录的路径
const serverDir = __dirname;

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    console.log(`收到请求: ${req.url}`);
    
    // 确定请求的文件路径
    let filePath = path.join(serverDir, req.url === '/' ? 'index.html' : req.url);
    
    // 设置文件的MIME类型
    const mimeTypes = {
        '.html': 'text/html',
        '.js': 'application/javascript',
        '.css': 'text/css',
        '.json': 'application/json',
        '.png': 'image/png',
        '.jpg': 'image/jpg',
        '.gif': 'image/gif',
        '.svg': 'image/svg+xml',
        '.wav': 'audio/wav',
        '.mp4': 'video/mp4',
        '.woff': 'application/font-woff',
        '.ttf': 'application/font-ttf',
        '.eot': 'application/vnd.ms-fontobject',
        '.otf': 'application/font-otf',
        '.wasm': 'application/wasm'
    };
    
    // 获取文件扩展名
    const extname = String(path.extname(filePath)).toLowerCase();
    // 根据扩展名选择MIME类型
    const contentType = mimeTypes[extname] || 'application/octet-stream';
    
    // 读取文件并响应
    fs.readFile(filePath, (error, content) => {
        if (error) {
            if (error.code === 'ENOENT') {
                // 文件不存在
                res.writeHead(404, { 'Content-Type': 'text/html' });
                res.end('<h1>404 未找到文件</h1>', 'utf-8');
            } else {
                // 服务器错误
                res.writeHead(500);
                res.end(`服务器错误: ${error.code} 请联系管理员`, 'utf-8');
            }
        } else {
            // 成功读取文件
            res.writeHead(200, { 'Content-Type': contentType });
            res.end(content, 'utf-8');
        }
    });
});

// 服务器监听端口
const PORT = process.env.PORT || 3000;

(async () => {
    // 首先检查文件是否今天已更新
    if (isFileUpdatedToday(lotteryFilePath)) {
        console.log('✅ lottery_results.json 文件今天已经更新，跳过爬取操作');
        ssqPredictor.main();
        return; // 直接退出，不执行后续操作
    }

  try {
    const response = await fetch(url);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data = await response.text();

    // 验证 JSON 格式是否有效
    JSON.parse(data); // 如果不是合法 JSON，这里会抛出异常

    // 保存到本地文件
    fs.writeFileSync('./lottery_results.json', data);
    fs.writeFileSync('./lottery_results.js', 'window.lotteryResults = ' + data);
    console.log('✅ 文件已成功下载并保存为 lottery_results.json');

    ssqPredictor.main();
  } catch (err) {
    console.error('❌ 下载失败:', err.message);
  }
})().then(() => {
    server.listen(PORT, () => {
        console.log(`服务器运行在 http://localhost:${PORT}/ 访问该网址,查看历史开奖结果数据`);
        openBrowser(`http://localhost:${PORT}/`);
        // 使用openBrowser打开默认浏览器访问该网址
    });
});